import jieba
from gensim import corpora,models,similarities
'''对数据进行预处理'''
def getfratures(texts):
    all_doc_list=[]
    for doc in texts:
        text1=[text for text in jieba.cut(doc)]
        all_doc_list.append(text1)
    '''基于文本级建立【词典】，并获得词典特征数'''
    dictionary=corpora.Dictionary(all_doc_list)#制作词袋
    num_features=len(dictionary.keys())#数字化
    '''基于词典，将【分词列表集】转换为【稀疏向量集】，称作【语科库】'''
    corpus=[dictionary.doc2bow(text) for text in all_doc_list]
    return  corpus,dictionary,num_features

'''输出结果'''
def printresult(sim):
    '''对下标和相似度进行一个结果排序，拿出相似度最高的结果'''
    cc=sorted(enumerate(sim),key=lambda item:item[1],reverse=True)
    if cc[0][1]>0.8:
        return True
    else:
        return False
'''主函数'''
def main():
    '''将【文本集】生成【分词列表】'''
    texts = open('我国软件工程技术的现状.txt', 'r').read()
    keyword = open('对软件开发工作进行创新的方法.txt', 'r').read()
    text1 = texts.split("。")
    keyword1 = keyword.split("。")
    '''【python】中调用函数方法'''
    corpus,dictionary,num_features = getfratures(text1)

    lsi = models.LsiModel(corpus)
    index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features)
    count=0
    for a in keyword1:
        '''用【词典】把【搜索词】也转换为【稀疏向量】'''
        doc_test_list=[word for word in jieba.cut(a)]
        doc_test_vec=dictionary.doc2bow(doc_test_list)

        sim=index[lsi[doc_test_vec]]
        if (printresult(sim)):
            count += 1
    print('相似度：{:^.2%}'.format(count / len(keyword1)))
main()